package com.gxa.jjty.phy.config;


import com.gxa.jjty.phy.interceptor.PermissionInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * springboot使用的拦截器的配置
 * 通过实现WebMvcConfigurer接口
 *
 * @ClassName InterceptorConfig
 * @Author: ws
 * @date 2021/11/11 10:40
 */

/**
 * @Configuration 表示当程序启动，自动加载bean，被spring管理，执行其中所有带有@Bean的方法
 * createPermissionInterceptor() 本身含有@Bean注解，也会被自动运行，并得到PermissionInterceptor
 * 通过@Autowried把PermissionInterceptor的bean注入到对象上，给注册器用
 *
 * 执行方法
 */

@Component
public class InterceptorConfig implements WebMvcConfigurer {

    /**
     * DI(依赖注入),从bean容器中找到并注入
     */
    @Autowired
    PermissionInterceptor permissionInterceptor;

    /**
     * 利用WebConfigurer提供的拦截器注册方法
     * 将自定义的PermissionInterceptor注册到spring的拦截器体系
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        registry.addInterceptor(permissionInterceptor)
                // 要拦截的路由(目标url)
                .addPathPatterns("/**")
                // 要放行的；路由(目标url)
                // 所有的注册和登录，静态资源(swagger)，验证码
                .excludePathPatterns("/**/doc.html/**")
                .excludePathPatterns("/**/swagger-ui/**")
                .excludePathPatterns("/**/swagger-resources/**")
                .excludePathPatterns("/**/doc-resources/**")
                .excludePathPatterns("/**/v3/**")

                .excludePathPatterns("/phyUser/login")
                .excludePathPatterns("/sms/send")
//                .excludePathPatterns("/phyUser/logout")
//                .excludePathPatterns("/phyUser/changePassword")
        ;

        // 添加第二个拦截器
        // registry.addInterceptor(null)
    }

    /**
     * 执行方法并将方法的返回值作为bean，添加到spring容器被管理
     * 通过value或name指定名字
     * 没有指定按默认规则： 和类名相同且首字母小写
     * @return
     */
    /*@Bean
    public PermissionInterceptor createPermissionInterceptor() {
        return new PermissionInterceptor();
    }*/

}
